#coding=utf8
import cv2
import os
import time
import pygame
recognizer = cv2.face.LBPHFaceRecognizer_create()

alarmed=0

setted=0

time_closed = 0

time_begin_to_close = 0

file = r'/home/pi/face_3/jinbao.mp3'

pygame.mixer.init()

track = pygame.mixer.music.load(file)

recognizer.read('face_trainer/trainer.yml')

cascadePath = "haarcascade_frontalface_alt.xml"
eyecascadePath = "haarcascade_eye_tree_eyeglasses.xml"

eyeCascade = cv2.CascadeClassifier(eyecascadePath)

faceCascade = cv2.CascadeClassifier(cascadePath)

font = cv2.FONT_HERSHEY_SIMPLEX

alarm = 0

idnum = 0


names = ['1', '2']


cam = cv2.VideoCapture(0)

minW = 0.1*cam.get(3)

minH = 0.1*cam.get(4)


while True:

    ret, img = cam.read()

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


    faces = faceCascade.detectMultiScale(

        gray,

        scaleFactor=1.2,

        minNeighbors=5,

        minSize=(int(minW), int(minH))

    )


    for (x, y, w, h) in faces:

        a, b = int(w / 2), int(h / 2)

        cv2.ellipse(img, (x+a, y+b), (a, b), 0, 0, 360, (255, 0, 255), 2)

        face = img[x:x+h, y:y+w] 

        eyes = eyeCascade.detectMultiScale(face, 1.3, 5)

        for x, y, w, h in eyes:
            a, b = int(w / 2), int(h / 2)
            cv2.ellipse(face, (x+a, y+b), (a, b), 0,0, 360, (0, 255, 0), 2)
        if len(eyes) == 0:
            time_closed = time.time()
            if (time_closed - time_begin_to_close) > 2 :
                pygame.mixer.queue('/home/pi/face_3/eyeclosed.mp3')
        else :
            time_begin_to_close = time.time()


        cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)

        idnum, confidence = recognizer.predict(gray[y:y+h, x:x+w])

        if confidence < 85:

            idnum = names[idnum]

            #print (setted)
            confidence = "{0}%".format(round(100 - confidence))
            if setted==0 :

                time_start=time.time()
                
                setted = 1
            else :
                time_start=time_start
            print (w*h)
            if (time.time()-time_start)>10 :

                pygame.mixer.music.play()

                time.sleep(2.5)
                alarmed=1
                setted = 0

        else:

            idnum = "unknown"
            time_start=time.time()
            confidence = "{0}%".format(round(100 - confidence))
        if w*h>50000:
            pygame.mixer.music.queue('/home/pi/face_3/dis.mp3')
            time.sleep(2.5)

        cv2.putText(img, str(idnum), (x+5, y-5), font, 1, (0, 0, 255), 1)

        cv2.putText(img, str(confidence), (x+5, y+h-5), font, 1, (0, 0, 0), 1)

    cv2.imshow('camera', img)

    k = cv2.waitKey(10)

    if k == 27 :

        cv2.imwrite('face.jpg',img)
        break

#os.system("python /home/pi/mail.py")

#os.system("rm face.jpg")

cam.release()
cv2.destroyAllWindows()
#os.system("python /home/pi/python2.7_guest/main.py")

